<?php
// +----------------------------------------------------------------------
// | Redis 类
// +----------------------------------------------------------------------
// | 说明，任何为false的串，存在redis中都是空串。
// | 只有在key不存在时，才会返回false。
// | 这点可用于防止缓存穿透
// +----------------------------------------------------------------------

namespace extend\jpush;

use JPush\Client as Client;

class Jpush
{
    /**
     * 通过别名发送极光推送消息
     * @param $title // 标题
     * @param $content // 内容
     * @param array $params // 扩展字段
     * @param $alias // 别名
     * @param string $ios_badge // ios 角标数
     * @param array $platform // 推送设备
     * @return array|bool
     */
    public static function pushMessage($title, $content, $params = [], $alias = [], $tag = 'cdc_push', $ios_badge = '0', $platform = ['ios', 'android'])
    {

        if (!is_array($alias)) return false;

        $app_key = 'abfa604c694de4976903b9e0';
        $master_secret = 'aab8cefa6d21830a0aeffb47';

        try {
            // 初始化
            $client = new Client($app_key, $master_secret);

            $result = $client->push()
                ->setPlatform($platform)
//                ->addAllAudience()
                ->addTag($tag)
                ->addAlias($alias)
                ->iosNotification(
                    $content, [
                    'sound' => '1',
                    'badge' => (int)$ios_badge,
                    'content-available' => true,
                    'extras' => $params,
                ])
                ->androidNotification($content, [
                    'title' => $title,
                    'extras' => $params,
                ])
                ->options([
                    'sendno' => 100,
                    'time_to_live' => 86400,
                    'apns_production' => true, // ios推送证书的选择，True 表示推送生产环境，False 表示要推送开发环境
                ])->send();
            return ['status' => 1, 'msg' => $result['http_code']];
        } catch (\Exception $e) {
            // 写入错误日志
            // 这里根据自己的业务来定
            return ['status' => 0, 'msg' => self::code($e->getCode())];
        }
    }

    public static function code($code)
    {
        switch ($code) {
            case 200:
                $message = '发送成功！';
                break;
            case 1000:
                $message = '失败(系统内部错误)';
                break;
            case 1001:
                $message = '失败(只支持 HTTP Post 方法，不支持 Get 方法)';
                break;
            case 1002:
                $message = '失败(缺少了必须的参数)';
                break;
            case 1003:
                $message = '失败(参数值不合法)';
                break;
            case 1004:
                $message = '失败(验证失败)';
                break;
            case 1005:
                $message = '失败(消息体太大)';
                break;
            case 1008:
                $message = '失败(appkey参数非法)';
                break;
            case 1020:
                $message = '失败(只支持 HTTPS 请求)';
                break;
            case 1030:
                $message = '失败(内部服务超时)';
                break;
            default:
                $message = '失败(返回其他状态，目前不清楚额，请联系开发人员！)';
                break;
        }
        return $message;
    }

}